package com.zixin.util;

import java.security.NoSuchAlgorithmException;
import java.security.NoSuchProviderException;

import com.alibaba.druid.filter.config.ConfigTools;

/**
 * druid 加密工具类
 *
 * @author Jindou
 * @date 2021/11/3
 * @return
 */
public class DruidUtil extends ConfigTools {
    private DruidUtil() {
    }

    private static String[] genKeyPair;

    static {
        try {
            genKeyPair = ConfigTools.genKeyPair(512);
        } catch (NoSuchAlgorithmException | NoSuchProviderException e) {
            System.out.println("初始化异常");
        }
    }

    /**
     * 用RSA算法获取私钥
     *
     * @return 私钥
     */
    public static String getPrivateKey() {
        return genKeyPair[0];
    }

    /**
     * 用RSA算法获取公钥
     *
     * @return 公钥
     */
    public static String getPublicKey() {
        return genKeyPair[1];
    }

    /**
     * 将明文通过RSA算法加密
     *
     * @param decryptPsw 明文密码
     * @return sm4算法的密文
     */
    public static String encrypt(String decryptPsw) {
        try {
            // 私钥
            String privateKey = genKeyPair[0];
            // 用私钥加密后的密文
            String druidPsw = ConfigTools.encrypt(privateKey, decryptPsw);
            return druidPsw;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return "";
    }

    /**
     * 将RSA算法加密的密文解密
     *
     * @param encryptPsw RSA算法密文
     * @return 解密的明文
     */
    public static String decrypt(String encryptPsw) {
        try {
            // 私钥
            String publicKey = genKeyPair[1];
            // 用私钥加密后的密文
            String druidPsw = ConfigTools.decrypt(publicKey, encryptPsw);
            return druidPsw;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return "";
    }
}
